/**
 * @param {string} s1
 * @param {string} s2
 * @return {boolean}
 */
var checkInclusion = function (s1, s2) {

    let len1 = s1.length
    let len2 = s2.length
    if (len1 > len2) {
        return false
    }

    let cache = new Array(26).fill(0)

    // 初始化cache
    for (let i = 0; i < len1; i++) {
        cache[s1.charCodeAt(i) - 'a'.charCodeAt(0)] -= 1
    }

    // 遍历 s2
    let l = 0
    for (let r = 0; r < len2; r++) {
        let p = s2.charCodeAt(r) - 'a'.charCodeAt(0)
        //cache对应位置加1
        cache[p] += 1
        // 如果 超过了0 表示不匹配，将left 位置的字母放入cache,left进行右移,
        while (cache[p] > 0) {
            // 把之前加的1还原回去
            cache[s2.charCodeAt(l) - 'a'.charCodeAt(0)] -= 1
            // 并且左指针右移
            l += 1
        }
        // 如果刚好长度相同，则刚好匹配
        if (r - l + 1 === len1) {
            return true
        }
    }
    return false
};

console.log(checkInclusion('ab', 'eidboaboo'))